package cn.oyjg.base.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import cn.oyjg.base.dao.BaseDao;
import cn.oyjg.base.util.PageUtil;

@Service("baseService")
public abstract class BaseServiceImpl<T> implements BaseService<T> {
	
	
	/**
	 * 提供的获取继承子类实现的Dao的公共接口的抽象方法，继承的子类必须重写该方法
	 * 
	 * @return：返回实体对应的Dao对象
	 */
	public abstract BaseDao<T> getBaseDao();
	/**
	 * 保存一个对象
	 * 
	 * @param o
	 *            对象
	 * @throws Exception 
	 * @throws Exception 
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void insert(T o){
		getBaseDao().insert(o);
	}

	/**
	 * 更新一个对象
	 * 
	 * @param o
	 *            对象
	 * @throws Exception 
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void update(T o){
		getBaseDao().update(o);
	}

	/**
	 * 删除一个对象
	 * 
	 * @param o
	 *            对象
	 * @throws Exception 
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void delete(Integer id){
		getBaseDao().delete(id);
	}
	
	public List<T> selectAll(){
		return getBaseDao().selectAll();
	}


	/**
	 * 查找对象集合,带分页
	 * 
	 * @param hql
	 * @param page
	 *            当前页
	 * @param rows
	 *            每页显示记录数
	 * @param param
	 * @return 分页后的List<T>
	 */
	public List<T> selectListByPage(PageUtil page){
		page.setRecordTotal(selectCountByPage(page));
		return getBaseDao().selectListByPage(page);
		
	}

	public int selectCountByPage(PageUtil page){
		return getBaseDao().selectCountByPage(page);
	}

}
